Preparativos

# Carga de paquetes
library(dplyr)
library(sf)
library(DT)
library(plotly)
library(leaflet)
library(raster)
library(spData)
# Carga de datos

prim <-
  st_read(
    "https://raw.githubusercontent.com/gf0604-procesamientodatosgeograficos/2021i-datos/main/gbif/primates-cr-registros.csv",
    options = c(
      "X_POSSIBLE_NAMES=decimalLongitude",
      "Y_POSSIBLE_NAMES=decimalLatitude"
    ),
    quiet = TRUE
  )

# Asignación de CRS
st_crs(prim) = 4326

# Capa geoespacial de cantones
cantones <-
  st_read(
    "https://raw.githubusercontent.com/gf0604-procesamientodatosgeograficos/2021i-datos/main/ign/delimitacion-territorial-administrativa/cr_cantones_simp_wgs84.geojson",
    quiet = TRUE
  )
# Cruce espacial con la tabla de cantones
prim <- 
  prim %>%
  st_join(cantones["canton"])

Tabla de registro

prim %>%
  st_drop_geometry() %>%
  dplyr::select(stateProvince, canton, eventDate, family, species) %>%
  datatable(
    colnames = c("Provincia", "Cantón", "Fecha", "Familia", "Especie"),
    options = list(searchHighlight = TRUE)
  )

Gráfico

prim %>%
  st_drop_geometry() %>%
  group_by(month = format(as.Date(eventDate, "%Y-%m-%d"), "%m")) %>%
  summarize(species = n()) %>%
  filter(!is.na(month))  %>%
  plot_ly(x = ~ month,
          y = ~ species,
          type="scatter", mode="markers", fill = "tozeroy", fillcolor = "orange") %>%
  layout(title = "Especies",
         xaxis = list(title = "Mes"),
         yaxis = list(title = "Cantidad de registros de especies"))

Mapa

prim %>%
  dplyr::select(stateProvince,
         canton,
         locality,
         eventDate,
         decimalLongitude,
         decimalLatitude) %>%
  leaflet() %>%
  addProviderTiles(providers$OpenStreetMap.Mapnik, group = "OpenStreetMap") %>%
  addProviderTiles(providers$Stamen.TonerLite, group = "Stamen Toner Lite") %>%
  addProviderTiles(providers$Esri.WorldImagery, group = "Imágenes de ESRI") %>%
  addCircleMarkers(
    stroke = F,
    radius = 4,
    fillColor = 'gray',
    fillOpacity = 1,
    popup = paste(
      prim$stateProvince,
      prim$canton,
      prim$locality,
      prim$eventDate,
      prim$decimalLongitude,
      prim$decimalLatitude,
      sep = '<br/>'
    ),
    group = "Primates"
  ) %>%
  addLayersControl(
    baseGroups = c("OpenStreetMap", "Stamen Toner Lite", "Imágenes de ESRI"),
    overlayGroups = c("Primates")
  ) %>%
  addMiniMap(
    tiles = providers$Stamen.OpenStreetMap.Mapnik,
    position = "bottomleft",
    toggleDisplay = TRUE
  )